package com.ww.learn.extenfun

import java.util.*

// 为String类型添加扩展函数
fun String.addExclamation(): String {
    return "$this!"
}

// 带参数的扩展函数
fun String.repeats(times: Int): String {
    return this.repeat(times)
}

// 为String添加扩展属性
val String.lastChar: Char
    get() = this[length - 1]
val String.isPalindrome: Boolean
    get() = this == this.reversed()

// 空安全扩展函数
fun String?.safeToUpperCase(): String {
    return this?.uppercase(Locale.getDefault()) ?: "NULL_STRING"
}

// 泛型扩展函数
// 为List<T>添加扩展函数
fun <T> List<T>.secondOrNull(): T? {
    return if (this.size >= 2) this[1] else null
}

// 为任何集合添加扩展
fun <T> Collection<T>.penultimateOrNull(): T? {
    return if (size >= 2) elementAt(size - 2) else null
}

fun main() {
//    val str = "hello"
//    // hello!
//    println(str.addExclamation())

    // HiHiHi
//    println("Hi".repeats(3))

    // 使用
//    println("Kotlin".lastChar) // n
//    println("radar".isPalindrome) // true
//    println("hello".isPalindrome) // false

//    // 空安全
//    val nullableString: String? = null
//    println(nullableString.safeToUpperCase()) // NULL_STRING

    // 泛型扩展函数
    val list = listOf(1, 2, 3)
    println(list.secondOrNull()) // 2
    println(list.penultimateOrNull()) // 2
}